Skip to content

feat(tools): 実測の自動化・優先度区分の整理・Claude PRレビューの試行導入 - #1898

Merged
mhaya merged 6 commits into
develop_v2.0.4from
chore/api-inventory-column-review
Aug 25, 2026
Merged

feat(tools): 実測の自動化・優先度区分の整理・Claude PRレビューの試行導入#1898
mhaya merged 6 commits into
develop_v2.0.4from
chore/api-inventory-column-review

Conversation

@mhaya

@mhaya mhaya commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

概要 (Summary)

PR #1897 のマージ後に積んだ4コミットです。ツールとワークフローのみで、アプリケーションコードへの変更はありません。

  1. 実測の反映とワークフロー測定apply_probe_results.py / remeasure.sh を追加し、フィクスチャにワークフロー activity を追加
  2. フィクスチャの解決範囲を拡大 — 未解決プレースホルダを削減(未測定 407 → 26 件)
  3. 優先度区分を P1〜P5 に整理P0(至急)P0(最優先)P1 に統合し、以降を繰り上げてかっこを除去
  4. Claude による PR レビューを試行導入 — Anthropic API キーを使わない構成

変更タイプ (Type of Change)

  • 🚀 新機能追加 (Feature) — CI/開発基盤
  • 📚 仕様書・マニュアル・APIリストの更新 (Documentation)

1. 実測の自動化

remeasure.sh が「フィクスチャ投入 → 実測 → 台帳反映 → 再計算」を通しで実行します。

remeasure.sh                    # 未測定の P1/P2 を測る
remeasure.sh --all-unmeasured   # 未測定を全件
remeasure.sh --nos 607,618      # no 指定
remeasure.sh --read-only        # GET/HEAD のみ(副作用なし)

fixtures.py にワークフロー activity(自分所有 / 他人所有の2件)と著者、既存初期データのID参照を追加しました。probe_ci.py<activity_id> を両方に解決して測るため、所有者チェックの欠落を検証できます。

未測定 407 → 26 件(94% 測定済み) になりました。

2. 優先度区分の整理

P0(至急) + P0(最優先) → P1     P1(高) → P2     P2(中) → P3
P3(低) → P4                    P4(低・実装済) → P5
整理対象 / 環境依存 / 対象外 は変更なし(優先度ではなく扱いの区分のため)

3. Claude による PR レビュー(試行)

Anthropic API キーを使わず、Claude サブスクリプションの長期トークンで認証します。通信はアウトバウンドのみで、公開エンドポイント・固定IP・常駐プロセスは不要です。

cloud-hosted の claude ultrareview は本アカウントで利用できなかった(Ultrareview is currently unavailable)ため、ヘッドレス実行(claude -p)を使います。

public リポジトリ向けの配慮

  • fork からの PR では起動しない(Secret が渡らないため)
  • レビュー結果は PR に投稿せず artifact 止まりPOST_TO_PR で切替)
  • --allowed-tools "" --permission-mode planツール実行を一切許可しない
  • 差分 200KB 超はスキップ

観点

汎用のコードレビューではなく、この台帳作業の文脈に寄せています。

  1. 認可の欠落・後退(デコレータ削除、permission factory の無効化、所有者チェック欠落)
  2. 破壊的操作の追加や条件緩和
  3. 入力検証の不足
  4. 既存挙動を変える変更で呼び出し側への影響が未考慮のもの

この PR 自体がレビューの動作確認を兼ねています。 確認後、pull_request トリガは workflow_dispatch のみに戻します。

補足

台帳は public な本リポジトリに含まれていません。スクリプトは WEKO_API_INVENTORY_DIR が指す秘密の場所を読み書きします。台帳側の変更は別リポジトリに反映済みです。

mhaya and others added 5 commits August 25, 2026 00:53
- fixtures.py にワークフロー activity の作成を追加。自分所有/他人所有の2件を作る。
  no.601-636 は <activity_id> を要求するため、これが無いと probe が
  未解決プレースホルダで skip していた。
- probe_ci.py が <activity_id>/<action_id>/<workflow_id>/<flow_id> を解決し、
  activity は自分所有と他人所有の両方で測る(所有者チェックの検証のため)。
- apply_probe_results.py を新規追加。probe.json を台帳の dynamic_verified に
  反映する。既定では空欄の行だけを埋め、★実証など人手で精査した既存値は残す。
- remeasure.sh を新規追加。フィクスチャ投入 → 実測 → 反映 → 再計算 を通しで行う。
  --all-unmeasured / --nos / --read-only に対応。
- scripts/README.md にケース2c(実測の測り直し)と、測定できる範囲を追記。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HXo9u6PoTf6VRKr3aiGvZ3
実測で skip していた行の原因を集計し、フィクスチャ側で解決できるようにした。

- 著者(authors)を1件作成。初期状態で0件のため <identifier> が解決できなかった。
- 既存の初期データのIDを参照して fixtures.json に載せる(作成はしない)。
  item_type_id / property_id / mail_template_id / prefix_id / affiliation_id /
  facet_search_id / oauth_client_id / oauth_token_id。install.sh が投入する
  データなので、フィクスチャで作ると二重になる。
- probe_ci.py が上記と定数(<lang_code>/<current_language>=ja、<req>=1)を解決。

CI も同じ fixtures.py / probe_ci.py を呼ぶため、拡張はそのまま CI に反映される。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HXo9u6PoTf6VRKr3aiGvZ3
旧 P0(至急) と P0(最優先) を P1 に統合し、以降を繰り上げてかっこを外した。
P0 が2種類あるのが分かりにくく、かっこ内の補足も区分名として冗長だったため。

  P0(至急) + P0(最優先) → P1
  P1(高)                → P2
  P2(中)                → P3
  P3(低)                → P4
  P4(低・実装済)         → P5
  整理対象 / 環境依存 / 対象外 は変更なし(優先度ではなく扱いの区分のため)

テスト観点による引き上げの上限も P2 → P3 に追随させた(同じ層を指す)。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HXo9u6PoTf6VRKr3aiGvZ3
Anthropic API キーではなく Claude サブスクリプションの長期トークンで認証する。
通信はアウトバウンドのみで、公開エンドポイントや常駐プロセスは不要。

cloud-hosted の claude ultrareview は本アカウントで利用できなかった
("Ultrareview is currently unavailable")ため、ヘッドレス実行(claude -p)を使う。
差分を stdin で渡し、--allowed-tools "" --permission-mode plan により
ツール実行を一切許可しない。

public リポジトリ向けの配慮:
  - fork からの PR では起動しない(Secret が渡らないため)
  - レビュー結果は PR に投稿せず artifact 止まり(POST_TO_PR で切替)
  - 差分 200KB 超はスキップ

観点は認可の欠落・後退、破壊的操作、入力検証、既存挙動の変更に絞り、
差分から読み取れる事実のみを書かせる。

動作確認のため一時的に pull_request トリガを有効化している。
確認後は workflow_dispatch のみに戻す。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HXo9u6PoTf6VRKr3aiGvZ3
初回実行が3秒で exit 1 になり、stdout を raw.json にリダイレクトしていたため
エラー内容が取れなかった。stdout/stderr を両方残して表示し、artifact にも
上げるようにした。診断目的のためジョブは落とさない。

--allowed-tools は可変長引数で空文字を渡すと解釈が不安定なため指定をやめた
(--permission-mode plan により変更系は行われない)。環境変数名は
CLAUDE_CODE_OAUTH_TOKEN で正しいことをバイナリ内の文字列で確認済み。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HXo9u6PoTf6VRKr3aiGvZ3
@github-actions

Copy link
Copy Markdown

API インベントリ差分(件数のみ)

明細は公開できないため件数のみ表示しています。該当箇所は秘密側の台帳・レポートで確認してください。

ベースラインとの差分

API インベントリ差分レポート

  • 旧: d2fdc0e3b v2.0.3 (profile=default) endpoints=860 (外部ライブラリ由来 291)
  • 新: 0b0ed9583 v2.0.3-26-g0b0ed9583 (profile=default) endpoints=860 (外部ライブラリ由来 291)

判定: ✅ PASS (FAIL 0 / WARN 1)

サマリ

分類 件数
ADDED 0
REMOVED 0
RULE_CHANGED 0
METHODS_CHANGED 0
AUTH_CHANGED 0
IMPL_CHANGED 0
ATTRS_UNKNOWN_NEW 0
ModelView 追加 0
ModelView 削除 0
ModelView フラグ変化 0
config 変化 0
コメントアウト認証の増加 0
依存パッケージの版変化 3

[WARN] W6 依存パッケージの版が変化した — 3件

  • pbr — 7.0.3 -> 7.1.1
  • pyld — 3.1.0 -> 3.2.0
  • weko-redis — 0.1.0.dev20170000 -> (削除)

台帳との突き合わせ

スナップショット ↔ インベントリ 突き合わせ

  • リビジョン: 0b0ed9583 v2.0.3-26-g0b0ed9583 経路URI=870
  • 台帳: 行=926 URI=881

件数のみ。詳細は秘密側の完全版レポートを参照。

判定: ✅ 一致 (0件)

検出 件数
A. インベントリ未収載(抽出漏れ) 0
B. 実機に無い(未説明) 0
B'. 実機に無い(既知・許容) 11
C. メソッド不一致 0
D. app列の不一致 0

@github-actions

Copy link
Copy Markdown

API インベントリ差分(件数のみ)

明細は公開できないため件数のみ表示しています。該当箇所は秘密側の台帳・レポートで確認してください。

ベースラインとの差分

API インベントリ差分レポート

  • 旧: d2fdc0e3b v2.0.3 (profile=default) endpoints=860 (外部ライブラリ由来 291)
  • 新: a97200a18 v2.0.3-25-ga97200a18 (profile=default) endpoints=860 (外部ライブラリ由来 291)

判定: ✅ PASS (FAIL 0 / WARN 1)

サマリ

分類 件数
ADDED 0
REMOVED 0
RULE_CHANGED 0
METHODS_CHANGED 0
AUTH_CHANGED 0
IMPL_CHANGED 0
ATTRS_UNKNOWN_NEW 0
ModelView 追加 0
ModelView 削除 0
ModelView フラグ変化 0
config 変化 0
コメントアウト認証の増加 0
依存パッケージの版変化 3

[WARN] W6 依存パッケージの版が変化した — 3件

  • pbr — 7.0.3 -> 7.1.1
  • pyld — 3.1.0 -> 3.2.0
  • weko-redis — 0.1.0.dev20170000 -> (削除)

台帳との突き合わせ

スナップショット ↔ インベントリ 突き合わせ

  • リビジョン: a97200a18 v2.0.3-25-ga97200a18 経路URI=870
  • 台帳: 行=926 URI=881

件数のみ。詳細は秘密側の完全版レポートを参照。

判定: ✅ 一致 (0件)

検出 件数
A. インベントリ未収載(抽出漏れ) 0
B. 実機に無い(未説明) 0
B'. 実機に無い(既知・許容) 11
C. メソッド不一致 0
D. app列の不一致 0

初回試行で「fixtures.py の %% は SyntaxError」という誤指摘が出た。実際は
その文字列が PAYLOAD % {...} で展開される前提で %% が正しく、差分だけでは
文脈が見えないことが原因だった。

- --allowed-tools "Read,Grep,Glob" を許可し、リポジトリの実物を読ませる。
  変更系のツールは許可せず --permission-mode plan も併用する。
- プロンプトの最重要規則を「指摘する前に必ず裏を取る」にし、確認せずに
  指摘してはいけない例(未定義に見える変数、書式の誤り、呼び出し側の追随)を挙げた。
- 出力に verified 欄を追加し、どのファイルを読んで確認したかを書かせる。
  埋まらない指摘は出力しないよう指示。
- 「指摘ゼロは正当な結論」と明記し、件数稼ぎを抑止。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HXo9u6PoTf6VRKr3aiGvZ3
@mhaya
mhaya merged commit ef54d7d into develop_v2.0.4 Aug 25, 2026
30 of 96 checks passed
@github-actions

Copy link
Copy Markdown

API インベントリ差分(件数のみ)

明細は公開できないため件数のみ表示しています。該当箇所は秘密側の台帳・レポートで確認してください。

ベースラインとの差分

API インベントリ差分レポート

  • 旧: d2fdc0e3b v2.0.3 (profile=default) endpoints=860 (外部ライブラリ由来 291)
  • 新: 503909697 v2.0.3-27-g503909697 (profile=default) endpoints=860 (外部ライブラリ由来 291)

判定: ✅ PASS (FAIL 0 / WARN 1)

サマリ

分類 件数
ADDED 0
REMOVED 0
RULE_CHANGED 0
METHODS_CHANGED 0
AUTH_CHANGED 0
IMPL_CHANGED 0
ATTRS_UNKNOWN_NEW 0
ModelView 追加 0
ModelView 削除 0
ModelView フラグ変化 0
config 変化 0
コメントアウト認証の増加 0
依存パッケージの版変化 3

[WARN] W6 依存パッケージの版が変化した — 3件

  • pbr — 7.0.3 -> 7.1.1
  • pyld — 3.1.0 -> 3.2.0
  • weko-redis — 0.1.0.dev20170000 -> (削除)

台帳との突き合わせ

スナップショット ↔ インベントリ 突き合わせ

  • リビジョン: 503909697 v2.0.3-27-g503909697 経路URI=870
  • 台帳: 行=926 URI=881

件数のみ。詳細は秘密側の完全版レポートを参照。

判定: ✅ 一致 (0件)

検出 件数
A. インベントリ未収載(抽出漏れ) 0
B. 実機に無い(未説明) 0
B'. 実機に無い(既知・許容) 11
C. メソッド不一致 0
D. app列の不一致 0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant